package ar.edu.utn.frba.tacs.warnes;

import static org.junit.Assert.assertEquals;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import ar.edu.utn.frba.tacs.warnes.cotizacion.Dolar;
import ar.edu.utn.frba.tacs.warnes.cotizacion.Euro;
import ar.edu.utn.frba.tacs.warnes.cotizacion.Peso;
import ar.edu.utn.frba.tacs.warnes.cotizacion.Real;
import ar.edu.utn.frba.tacs.warnes.entities.Pieza;
import ar.edu.utn.frba.tacs.warnes.utils.ConstantesWarnes;
import ar.edu.utn.frba.tacs.warnes.utils.ContenedorWarnes;

public class MonedasTestCase {

	private ContenedorWarnes contenedor;
	private Pieza pieza;

	@Before
	public void inicializaciones() {
		this.contenedor = ContenedorWarnes.getInstance();
		this.pieza = this.contenedor.creaUnaPieza("Rueda");
		this.pieza.setId(new Long(1));
		this.pieza.setCategoria(ConstantesWarnes.Categoria.PARTES);
	}

	@After
	public void limpiarContenedor() {
		this.contenedor.limpiate();
	}

	@Test
	public void testPrecioPiezas() {
		Float precioEnPesos = new Float(5);
		Float precioMultiplicado = precioEnPesos;

		this.pieza.setPrecioEnPesos(precioEnPesos);
		assertEquals(precioEnPesos, this.pieza.getPrecioEnPesos());

		this.contenedor.setMoneda(Dolar.getInstance());
		precioMultiplicado = precioEnPesos / this.contenedor.getValorMoneda();
		assertEquals(precioMultiplicado, this.pieza.getPrecioSegunMoneda());

		this.contenedor.setMoneda(Euro.getInstance());
		precioMultiplicado = precioEnPesos / this.contenedor.getValorMoneda();
		assertEquals(precioMultiplicado, this.pieza.getPrecioSegunMoneda());

		this.contenedor.setMoneda(Real.getInstance());
		precioMultiplicado = precioEnPesos / this.contenedor.getValorMoneda();
		assertEquals(precioMultiplicado, this.pieza.getPrecioSegunMoneda());
	}

	@Test
	public void testCotizacionMonedas() {
		Float precioEnPesos = new Float(5);
		this.pieza.setPrecioEnPesos(precioEnPesos);

		//PESOS
		this.contenedor.setMoneda(Peso.getInstance());
		Float precioMultiplicado = precioEnPesos * this.contenedor.getValorMoneda();
		assertEquals(precioMultiplicado, this.pieza.getPrecioSegunMoneda());//5 / 1
		
		this.contenedor.cambiarCotizacion(Peso.getInstance(), new Float(1.5));
		precioMultiplicado = precioEnPesos / this.contenedor.getValorMoneda();
		assertEquals(precioMultiplicado, this.pieza.getPrecioSegunMoneda());//5 / 1,5
		
		//DOLAR
		this.contenedor.setMoneda(Dolar.getInstance());
		precioMultiplicado = precioEnPesos / this.contenedor.getValorMoneda();
		assertEquals(precioMultiplicado, this.pieza.getPrecioSegunMoneda());//5 / 3.9
		
		this.contenedor.cambiarCotizacion(Dolar.getInstance(), new Float(4));
		precioMultiplicado = precioEnPesos / this.contenedor.getValorMoneda();
		assertEquals(precioMultiplicado, this.pieza.getPrecioSegunMoneda());//5 / 4
		
		//PESOS otra vez
		this.contenedor.setMoneda(Peso.getInstance());
		this.contenedor.cambiarCotizacion(Peso.getInstance(), new Float(4));
		precioMultiplicado = precioEnPesos / this.contenedor.getValorMoneda();
		assertEquals(precioMultiplicado, this.pieza.getPrecioSegunMoneda());//5 / 1
	}

}
